from flask import Blueprint, render_template, request, jsonify
from models import House
from sqlalchemy import func

# 创建一个名为 'index_page' 的蓝图对象
index_page = Blueprint('index_page', __name__)


@index_page.route('/')
def index():
    # 查询数据库中房屋的总数量
    house_total_num = House.query.count()

    # 查询最新发布的6个房屋信息，按发布时间降序排列
    house_new_list = House.query.order_by(House.publish_time.desc()).limit(6).all()
    print(house_new_list)

    # 查询浏览量最高的4个房屋信息，按浏览量降序排列
    house_hot_list = House.query.order_by(House.page_views.desc()).limit(4).all()
    print(house_hot_list)

    # 渲染模板 'index.html'，并传递查询到的数据
    return render_template('index.html', house_new_list=house_new_list, house_hot_list=house_hot_list,
                           house_total_num=house_total_num)


@index_page.route('/search/keyword/', methods=['POST'])
def search_kw():
    # 从请求中获取搜索关键字和搜索类型
    kw = request.form['kw']
    info = request.form['info']

    # 如果搜索类型是 '地区搜索'
    if info == '地区搜索':
        # 查询包含关键字的地址，并统计每个地址的数量
        house_data = House.query.with_entities(House.address, func.count()).filter(House.address.contains(kw))
        result = house_data.group_by('address').order_by(func.count().desc()).limit(9).all()

        # 如果查询结果不为空，将结果格式化为 JSON 格式返回
        if len(result):
            data = []
            for i in result:
                data.append({'t_name': i[0], 'num': i[1]})
            return jsonify({'code': 1, 'info': data})
        else:
            return jsonify({'code': 1, 'info': []})

    # 如果搜索类型是 '户型搜索'
    if info == '户型搜索':
        # 查询包含关键字的户型，并统计每个户型的数量
        house_data = House.query.with_entities(House.rooms, func.count()).filter(House.rooms.contains(kw))
        result = house_data.group_by('rooms').order_by(func.count().desc()).limit(9).all()

        # 如果查询结果不为空，将结果格式化为 JSON 格式返回
        if len(result):
            data = []
            for i in result:
                data.append({'t_name': i[0], 'num': i[1]})
            return jsonify({'code': 1, 'info': data})
        else:
            return jsonify({'code': 1, 'info': []})
